
\documentclass[leqno,11pt]{article}

\usepackage[utf8]{inputenc}
\usepackage{polski}
\usepackage{a4wide}

\title{{\Huge \textbf{regexp-viz} \\}
         {\Large Specyfikacja projektu}}
\date{Wrocław, \today}
\author{Piotr Bober, Mikołaj Kalinowski}

\begin{document}
\maketitle

\section{Opis zadania}

\textbf{regexp-viz} to narzędzie do wizualizacji wyrażeń regularnych będących podzbiorem wyrażeń POSIX (w szczególności nie zostaną zaimplementowane referencje wsteczne, gdyż z liniowego automatu robią wykładniczy). Najpierw podane wyrażenie jest konwertowane do deterministycznego (DFA) i niedeterministycznego automatu skończonego (NFA), a następnie automaty są prezentowane graficznie. Użytkownik może wpisywać przykładowe słowa i obserwować funkcjonowanie automatu (przechodzenie między stanami i akceptacja słów).

\section{Opis użytkowników i funkcjonalności}
Użytkownikami programu będą głównie programiści, którym ma on pomóc w tworzeniu i analizie wyrażeń regularnych, które są często wykorzystywane, np. przy przetwarzaniu danych tekstowych. Ponadto taki wizualizator może mieć zastosowanie w celach dydaktycznych lub naukowych, bo jego główną funkcjonalnością jest przystępna prezentacja wyrażeń regularnych.

\section{Struktura tworzonego programu od strony użytkownika końcowego}
Interfejs graficzny programu będzie się składał na:
\begin{itemize}
   \item Pole do wprowadzania wyrażeń regularnych (weryfikujące także poprawność składniową);
   \item Kontrolki do wprowadzania elementów wyrażeń regularnych (operatory, klasy znaków);
   \item Pole do wprowadzania tekstu przetwarzanego przez automat;
   \item Kontrolki inicjujące przetwarzanie wprowadzonego wyrażenia na automaty;
   \item Okienko zawierające schemat automatu. Po wprowadzeniu każdej litery wprowadzonego tekstu w okienku zaznaczony jest stan (stany) w którym znajduje się automat;
\end{itemize}

\section{Struktura wewnętrzna programu}
Program dzieli się na moduły zgodnie z etapami jego działania:
\begin{itemize}
   \item parser wyrażeń regularnych - dla danych w formacie tekstu moduł ten zwraca abstrakcyjną strukturę danych reprezentującą dane wyrażenie regularne;
   \item konwerter wyrażeń regularnych do automatów skończonych - złożony z kilku etapów: konwersja do automatu niedeterministycznego, zamiana na deterministyczny, a na koniec minimalizacja otrzymanego DFA;
   \item wizualizator automatów - parsuje automat, rozmieszczając graf automatu na płaszczyźnie, by zmaksymalizować czytelność. Zwracany jest plik tekstowy zawierający listę wszystkich stanów i ich współrzędnych oraz plik graficzny zawierający narysowany automat
   \item interpreter - Przetwarza wprowadzony tekst, zaznaczając w oknach przejścia między kolejnymi stanami. Stany w których znajduje się automat są wyróżnione kolorem, a przejścia między stanami są połączone animacją.
\end{itemize}

\section{Technologia}
Moduł parsujący i przetwarzający wyrażenia regularne na automaty zostanie napisany w języku Haskell. Wizualizacja automatów będzie korzystała z pakietu \textit{graphviz}. Interfejs użytkownika, interpreter i kod integrujący moduły zostanie napisany w języku Python.

\section{Harmonogram}
\begin{itemize}
\item Stworzenie modułu parsującego wyrażenia regularne (P.B.)
\item Stworzenie modułu przetwarzającego wyrażenia regularne na automaty (M.K.)
\item Stworzenie modułu rysującego automaty 
\item Napisanie kodu interpretera automatów (razem z wizualizacją)
\item Zaprojektowanie interfejsu użytkownika i integracja
\item Testowanie i dokumentacja
\end{itemize}


\end{document}
